/**
 * Created by scutterry on 16/4/21.
 * 
 * version 1.3 2017-03-08
 * 添加 removeQueryString 方法
 * 
 * version 1.2 2017-1-22
 * 添加 ua 标志
 *  
 * version 1.1
 * 修改日期方法，去掉 Date.prototype.format,
 * 改为 myutils.dateFormat(date, "yyyy:MM:dd")
 */

(function (root, factory) {
    if (typeof define === "function" && define.amd) {
        define(["exports"], function (exports) {
            root.myutils = factory(root, exports);
        });
    } else if (typeof exports !== "undefined") {
        factory(root, exports);
    } else {
        root.myutils = factory(root, {});
    }
} (this, function (root, myutils) {
    /**
     * 根据 name 获取 url query 的值
     * @param name GET url 里面的key
     * @returns {string}
     */
    myutils.getQueryString = function (name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);  //获取url中"?"符后的字符串并正则匹配
        var context = "";
        if (r != null)
            context = r[2];
        reg = null;
        r = null;
        return context == null || context == "" || context == "undefined" ? "" : context;
    };

    myutils.hourExp = new RegExp(/h+/);
    myutils.minExp = new RegExp(/m+/);
    myutils.secExp = new RegExp(/s+/);
    /**
     * 转化秒成为时间
     * 只支持 hh:mm:ss 三个格式，可以只有两个 mm:ss
     */
    myutils.sec2TimeFormat = function (sec, format) {
        if (sec < 0) {
            sec = 0;
        }
        var h = Math.floor(sec / 3600);
        var t = sec - h * 3600;
        var min = Math.floor(t / 60);
        var s = t - min * 60;
        var res = "";
        if (myutils.hourExp.test(format)) {
            if (h < 10) {
                res = "0" + h;
            } else {
                res = h.toString();
            }
        }

        if (myutils.minExp.test(format)) {
            if (res != "") {
                res += ":";
            }
            if (min < 10) {
                res += "0" + min;
            } else {
                res += min;
            }
        }

        if (myutils.secExp.test(format)) {
            if (res != "") {
                res += ":";
            }
            if (s < 10) {
                res += "0" + s;
            } else {
                res += s;
            }
        }

        return res;
    };

    // 将 Date 转化为指定格式的String
    // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
    // 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
    // 例子：
    // myutils.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
    // myutils.dateFormat(new Date(), "yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
    //author: meizz
    myutils.dateFormat = function (d, fmt) {
        var o = {
            "M+": d.getMonth() + 1,                 //月份
            "d+": d.getDate(),                    //日
            "h+": d.getHours() % 12 == 0 ? 12 : d.getHours() % 12, //小时
            "H+": d.getHours(), //小时
            "m+": d.getMinutes(),                 //分
            "s+": d.getSeconds(),                 //秒
            "q+": Math.floor((d.getMonth() + 3) / 3), //季度
            "S": d.getMilliseconds()             //毫秒
        };
        if (/(y+)/.test(fmt))
            fmt = fmt.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt))
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    };

    /**
     * 获取特定月份最后一天
     * @param d 特定日期
     * return {number} 最后一天
     */
    myutils.getLastDay = function (d) {
        if (!d) {
            return 0;
        }
        var d2 = new Date(d.getFullYear(), d.getMonth() + 1, 1);
        //减去一天毫秒数
        var d3 = new Date(d2.getTime() - 86400000);//60 * 60 * 24 * 1000
        return d3.getDate();
    };

    /**
     * ua 标志
     */
    myutils.ua = (function () {
        var u = navigator.userAgent;
        var wxIndex = u.indexOf('MicroMessenger');
        var wxVersion = undefined;
        var isWeixinPay = false;
        if (wxIndex > -1) {
            var wxIndexEnd = u.indexOf(" ", wxIndex);
            if (wxIndexEnd == -1) {
                wxIndexEnd = u.length;
            }

            var wxStr = u.substring(wxIndex, wxIndexEnd);
            var arr = wxStr.split("/");
            if (arr && arr.length > 1) {
                wxVersion = arr[1];
                arr = wxVersion.split(".");
                if (arr && arr.length > 0)
                    isWeixinPay = parseInt(arr[0]) >= 5;//微信 5.0 开始支持支付
            }
        }


        return { //移动终端浏览器版本信息
            trident: u.indexOf('Trident') > -1, //IE内核
            presto: u.indexOf('Presto') > -1, //opera内核
            webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
            gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
            mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
            ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
            android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
            iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
            iPad: u.indexOf('iPad') > -1, //是否iPad
            webApp: u.indexOf('Safari') == -1, //是否web应该程序，没有头部与底部
            weixin: wxIndex > -1,
            weixinVersion: wxVersion,
            isWeixinPay: isWeixinPay
        };
    })();

    /**
     * 清除url上面的 querystring
     * @param ... 需要删除的查询字符名
     * 
     * myutils.removeQueryString("v", "date")
     */
    myutils.removeQueryString = function () {
        var len = arguments ? arguments.length : 0;
        var url = window.location.href;
        var search = window.location.search.substr(1);
        for (var i = 0; i < len; i++) {
            var name = arguments[i];
            var reg = new RegExp("(^|&)(" + name + "=[^&]*)(&|$)", "i");
            var r = search.match(reg);  //获取url中"?"符后的字符串并正则匹配
            if (r != null && r.length > 3) {
                var str;
                //如果只有一个参数情况，r[1] = "", r[3] = ""
                //最后一个参数时候，要去掉格式是 (&)v=1
                if (r[3] == "") {
                    str = r[1] + r[2];
                } else {
                    //否则为 v=1(&)
                    str = r[2] + r[3];
                }
                url = url.replace(str, "");
                search = search.replace(str, "");
            }
        }
        //所有查询字符删除后，需要把 ? 清理
        url = url.replace("?#", "#");//有 hash 情况
        url = url.replace(/\?$/, "");//没有 hash 情况
        return url;
    };

    //todo: 添加 query string
    myutils.addQueryString = function (name, value) {
        var r = window.location.search;
        if (r === "") {
            window
        }
    };

    return myutils;
}));